import Footer from '@/components/Footer';
import { getLoginUserUsingGET as queryCurrentUser } from '@/services/otherworldly-station-backend/UserController';
import { SearchOutlined } from '@ant-design/icons';
import type { Settings as LayoutSettings } from '@ant-design/pro-components';
import type { RunTimeLayoutConfig } from '@umijs/max';
import { history } from '@umijs/max';
import { Button, Tooltip } from 'antd';
import defaultSettings from '../config/defaultSettings';
import { AvatarDropdown, AvatarName } from './components/RightContent/AvatarDropdown';
import { errorConfig } from './requestConfig';

const isDev = process.env.NODE_ENV === 'development';
const loginPath = '/user/login';

/**
 * @see  https://umijs.org/zh-CN/plugins/plugin-initial-state
 * */
export async function getInitialState(): Promise<{
    settings?: Partial<LayoutSettings>;
    currentUser?: API.User;
    loading?: boolean;
    fetchUserInfo?: () => Promise<API.User | undefined>;
}> {
    const fetchUserInfo = async () => {
        try {
            const msg = await queryCurrentUser({
                skipErrorHandler: true,
            });
            return msg.data;
        } catch (error) {
            history.push(loginPath);
        }
        return undefined;
    };
    // 如果不是登录页面，执行
    const { location } = history;
    if (location.pathname !== loginPath) {
        const currentUser = await fetchUserInfo();
        return {
            fetchUserInfo,
            currentUser,
            settings: defaultSettings as Partial<LayoutSettings>,
        };
    }
    return {
        fetchUserInfo,
        settings: defaultSettings as Partial<LayoutSettings>,
    };
}

// ProLayout 支持的api https://procomponents.ant.design/components/layout
export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
    return {
        actionsRender: (props) => {
            if (props.isMobile)
                return [
                    // <Tooltip key={"mobileSearch"} title="search">
                    <Button
                        key={'mobileSearch'}
                        type="primary"
                        shape="circle"
                        icon={<SearchOutlined />}
                        onClick={() => history.push('search')}
                    />,
                    // </Tooltip>
                ];
            return [
                <Tooltip key={'pcSearch'} title="去搜索想看的影片">
                    <Button
                        type="primary"
                        shape="circle"
                        icon={<SearchOutlined />}
                        onClick={() => history.push('search')}
                    />
                </Tooltip>,
            ];
        },
        avatarProps: {
            src: initialState?.currentUser?.userAvatar,
            title: <AvatarName />,
            render: (_, avatarChildren) => {
                return <AvatarDropdown>{avatarChildren}</AvatarDropdown>;
            },
        },
        waterMarkProps: {
            // content: initialState?.currentUser?.userName,
        },
        footerRender: () => <Footer />,
        onPageChange: () => {
            const { location } = history;
            // 如果没有登录，重定向到 login
            if (!initialState?.currentUser && location.pathname !== loginPath) {
                history.push(loginPath);
            }
        },
        menuHeaderRender: undefined,
        ...initialState?.settings,
        // layoutBgImgList: [
        //     {
        //         src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/D2LWSqNny4sAAAAAAAAAAAAAFl94AQBr',
        //         left: 85,
        //         bottom: 100,
        //         height: '303px',
        //     },
        //     {
        //         src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/C2TWRpJpiC0AAAAAAAAAAAAAFl94AQBr',
        //         bottom: -68,
        //         right: -45,
        //         height: '303px',
        //     },
        //     {
        //         src: 'https://mdn.alipayobjects.com/yuyan_qk0oxh/afts/img/F6vSTbj8KpYAAAAAAAAAAAAAFl94AQBr',
        //         bottom: 0,
        //         left: 0,
        //         width: '331px',
        //     },
        // ],
        // links: isDev
        //     ? [
        //           <Link key="openapi" to="/umi/plugin/openapi" target="_blank">
        //               <LinkOutlined />
        //               <span>OpenAPI 文档</span>
        //           </Link>,
        //       ]
        //     : [],
        // 自定义 403 页面
        // unAccessible: <div>unAccessible</div>,
        // 增加一个 loading 的状态
        // childrenRender: (children) => {
        //     // if (initialState?.loading) return <PageLoading />;
        //     return (
        //         <>
        //             {children}
        //             <SettingDrawer
        //                 disableUrlParams
        //                 enableDarkTheme
        //                 settings={initialState?.settings}
        //                 onSettingChange={(settings) => {
        //                     setInitialState((preInitialState) => ({
        //                         ...preInitialState,
        //                         settings,
        //                     }));
        //                 }}
        //             />
        //         </>
        //     );
        // },
    };
};

/**
 * @name request 配置，可以配置错误处理
 * 它基于 axios 和 ahooks 的 useRequest 提供了一套统一的网络请求和错误处理方案。
 * @doc https://umijs.org/docs/max/request#配置
 */
export const request = {
    ...errorConfig,
};
